home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / internal / MixedContentModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  1.9 KB  |  111 lines

  1. package com.ibm.xml.internal;
  2.  
  3. import com.ibm.xml.framework.ContentModel;
  4. import com.ibm.xml.framework.ContentSpecNode;
  5. import com.ibm.xml.framework.ElementDeclPool;
  6. import com.ibm.xml.framework.InsertableElementsInfo;
  7.  
  8. class MixedContentModel implements ContentModel {
  9.    private int fCount = 0;
  10.    private int[] fChildren;
  11.  
  12.    public MixedContentModel(ElementDeclPool var1, int var2) throws CMException {
  13.       int var3 = 64;
  14.       int[] var4 = new int[var3];
  15.       ContentSpecNode var5 = new ContentSpecNode();
  16.  
  17.       while(true) {
  18.          try {
  19.             this.fCount = this.buildContentList(var1.getContentSpec(var2), var4, 0, var5, var1);
  20.             break;
  21.          } catch (IndexOutOfBoundsException var7) {
  22.             var3 *= 2;
  23.             var4 = new int[var3];
  24.             this.fCount = 0;
  25.          }
  26.       }
  27.  
  28.       this.fChildren = new int[this.fCount];
  29.  
  30.       for(int var6 = 0; var6 < this.fCount; ++var6) {
  31.          this.fChildren[var6] = var4[var6];
  32.       }
  33.  
  34.    }
  35.  
  36.    public int validateContent(int var1, int[] var2) throws Exception {
  37.       for(int var3 = 0; var3 < var1; ++var3) {
  38.          int var4 = var2[var3];
  39.          if (var4 != -1) {
  40.             int var5;
  41.             for(var5 = 0; var5 < this.fCount && var4 != this.fChildren[var5]; ++var5) {
  42.             }
  43.  
  44.             if (var5 == this.fCount) {
  45.                return var3;
  46.             }
  47.          }
  48.       }
  49.  
  50.       return -1;
  51.    }
  52.  
  53.    public int whatCanGoHere(boolean var1, InsertableElementsInfo var2) throws Exception {
  54.       for(int var3 = var2.insertAt; var3 < var2.childCount; ++var3) {
  55.          var2.curChildren[var3] = var2.curChildren[var3 + 1];
  56.       }
  57.  
  58.       --var2.childCount;
  59.       int var4 = this.validateContent(var2.childCount, var2.curChildren);
  60.       if (var4 != -1 && var4 < var2.insertAt) {
  61.          return var4;
  62.       } else {
  63.          var2.canHoldPCData = true;
  64.          var2.isValidEOC = true;
  65.          var2.resultsCount = this.fCount;
  66.          if (var2.results == null || var2.results.length < var2.resultsCount) {
  67.             var2.results = new boolean[var2.resultsCount];
  68.          }
  69.  
  70.          if (var2.possibleChildren == null || var2.possibleChildren.length < var2.resultsCount) {
  71.             var2.possibleChildren = new int[var2.resultsCount];
  72.          }
  73.  
  74.          boolean var5 = true;
  75.          if (var1 && var4 < var2.childCount) {
  76.             var5 = false;
  77.          }
  78.  
  79.          for(int var6 = 0; var6 < this.fCount; ++var6) {
  80.             var2.possibleChildren[var6] = this.fChildren[var6];
  81.             var2.results[var6] = var5;
  82.          }
  83.  
  84.          return -1;
  85.       }
  86.    }
  87.  
  88.    private final int buildContentList(int var1, int[] var2, int var3, ContentSpecNode var4, ElementDeclPool var5) throws CMException {
  89.       var5.getContentSpecNode(var1, var4);
  90.       if (var4.type == 0) {
  91.          var2[var3++] = var4.value;
  92.          return var3;
  93.       } else {
  94.          int var6 = var4.value;
  95.          int var7 = var4.otherValue;
  96.          if (var4.type != 4 && var4.type != 5) {
  97.             if (var4.type != 1 && var4.type != 2 && var4.type != 3) {
  98.                throw new CMException(152);
  99.             }
  100.  
  101.             var3 = this.buildContentList(var6, var2, var3, var4, var5);
  102.          } else {
  103.             var3 = this.buildContentList(var6, var2, var3, var4, var5);
  104.             var3 = this.buildContentList(var7, var2, var3, var4, var5);
  105.          }
  106.  
  107.          return var3;
  108.       }
  109.    }
  110. }
  111.